package My_Stack;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 周斌
 * Date: 2024-03-10
 * Time: 20:36
 */

import java.lang.reflect.Array;
import java.util.Arrays;

/**
 * DEFAULT_CAPACITY 默认容量
 */
public class ArrayStack {
    public int[] elem ;
    public int usedSize;//记录数组中有效数据的个数
    public static final int DEFAULT_CAPACITY = 10;
    public ArrayStack() {
        this.elem  = new int [DEFAULT_CAPACITY];
    }
    //push 压栈/入栈
    public void push (int val) {
        //判断栈中是否满了
        if(is_Full()) {
            //扩容
            this.elem = Arrays.copyOf(elem,2*elem.length);
        }
        //将数据压入栈中
        elem[usedSize++] = val;
    }
    public boolean is_Full () {
        return usedSize == elem.length;
    }
    //出栈
    public int pop () {
        //判断栈中是否为空
        if(is_Empty()) {
            //抛异常
            throw new EmptyStackException("栈空异常！！");
        }
        //数据还是存在数组中，只是记录数组有效个数usedSize变化了，但重新压入栈的数据会覆盖之前的数据。
        usedSize--;
        return elem[usedSize];
    }
    public boolean is_Empty() {
        return  usedSize == 0;
    }
    //peek
    public int peek() {
        //判断栈中是否为空
        if(is_Empty()) {
            //抛异常
            throw new EmptyStackException("栈空异常！！");
        }
        return elem[usedSize-1];
    }
}
